package com.tianji.promotion.utils;

import com.tianji.common.utils.BooleanUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.concurrent.TimeUnit;

// 用于自动生成一个包含所有被final修饰的成员变量的构造函数。这个注解会为每个final字段生成一个参数，并在构造对象时初始化这些字段。
@RequiredArgsConstructor
public class RedisLock {

    private final String key; // key做业务的区分 当前线程的名称做value
    private final StringRedisTemplate stringRedisTemplate;

    /**
     * 尝试获取锁
     * @param leaseTime 锁自动释放时间
     * @param unit 时间单位
     * @return 是否获取成功，true:获取锁成功;false:获取锁失败
     */
    public  boolean tryLock(long leaseTime, TimeUnit unit){
        String value = Thread.currentThread().getName();
        Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(key, value, leaseTime, unit);
        return BooleanUtils.isTrue(success);
    }

    /**
     * 释放锁
     */
    public void unlock(){
        stringRedisTemplate.delete(key);
    }


}
